package middle;

import java.nio.ByteBuffer;
import java.util.Arrays;

public class huace3 {
    public static void main(String[] args) {
        String inputStr = "61 62 63 64 32 30 31 32 4C 61 62";
        String result = simpleCheckSum(inputStr);
        System.out.println(result);

    }

    // 异或校验和
    private static String simpleCheckSum(String inputStr) {
        // 将输入的十六进制字符串转换为字节数组
        String[] hexBytes = inputStr.split(" ");
        byte[] byteArray = new byte[hexBytes.length];
        for (int i = 0; i < hexBytes.length; i++) {
            byteArray[i] = (byte) Integer.parseInt(hexBytes[i], 16);
        }

        // 计算补齐字节数
        int paddingBytes = 4 - byteArray.length % 4;
        if (paddingBytes < 4) {
            // 在尾部补齐字节
            byte[] paddedArray = new byte[byteArray.length + paddingBytes];
            System.arraycopy(byteArray, 0, paddedArray, 0, byteArray.length);
            Arrays.fill(paddedArray, byteArray.length, paddedArray.length, (byte) 0xFF);
            byteArray = paddedArray;
        }

        // 初始化校验和为0
        int checksum = 0;

        // 每4个字节进行一次异或运算
        for (int i = 0; i < byteArray.length; i += 4) {
            // 取出4个字节
            byte[] chunk = Arrays.copyOfRange(byteArray, i, i + 4);
            // 将4个字节转换为整数
            int value = ByteBuffer.wrap(chunk).getInt();
            // 异或运算
            checksum ^= value;
        }

        // 将结果格式化为8位的十六进制字符串
        return String.format("%08X", checksum);
    }

}
